<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

    <script>

        function createFuns() {
            var data = [], max = 3; // max = 3; 用来限定 添加方法的个数

            //  当页面 加载完成 把添加到 data 中的方法都执行一遍
            window.onload = function () {
                // 遍历data 中添加的方法
                for (var i = 0; i < data.length; i++) {
                    data[i](); // 执行data 中添加的方法
                }
            }


            return {
                addEvente: function () {
                    for (var i = 0; i < arguments.length; i++) {
                        // 判断 data 是否超过了限定长度
                        if (data.length >= max) {
                            data.shift()
                        }
                        data.push(arguments[i]);
                    }
                },
                getData: function () {
                    return data;
                },
                removeEvente: function (funName) {
                    // 查找要删除的方法在数组中的位置
                    var index = data.indexOf(funName);
                    if (index != -1) {
                        // 找到对应和元素就删除
                        data.splice(index, 1);
                    }
                }
            }
        }

        // 得到添加方法的 缓存对象
        var objFn = createFuns();

        // 添加三个方法
        objFn.addEvente(function fn1() {
            console.log('这是 fn1 函数体');
        })

        // 通过变量记录函数 添加和删除都是用这一记录就可以 找到对应的数据了
        var fn2 = function fn2() {
            console.log('这是 fn2 函数体');
        }
        objFn.addEvente(fn2)


        objFn.addEvente(function fn3() {
            console.log('这是 fn3 函数体');
        })

        // 获取 data 数据
        console.log(objFn.getData());

        // 删除添加的方法
        objFn.removeEvente(fn2)

        console.log(objFn.getData());

// console.log({} == {}); // false

        // 再追加两个 元素
        objFn.addEvente(function fn4() {
            console.log('这是 fn4');
        },
        function fn5() {
            console.log('这是 fn5');
        })

        console.log(objFn.getData());


    </script>

</body>

</html>